'''
Author: ytj
Date: 2023-11-06 08:41:11
LastEditTime: 2024-02-19 09:51:37
LastEditors: ytj
Description: 文件清理程序
'''
# -*- coding: UTF-8 -*-
# AI服务器源文件清理程序

import datetime
import os
import time

# from flask.scaffold import F
from lj_action import action_ai
from lj_tool import lj_bean_conn, tool_log, tool_run, tool_ssh
from lj_orm import tool_ai

# 文件清理

# 时间差


def days(str1, str2):
    try:
        date1 = datetime.datetime.strptime(str1[0:8], "%Y%m%d")
        date2 = datetime.datetime.strptime(str2[0:8], "%Y%m%d")
        num = (date1-date2).days
    except:
        # 时间异常的直接删除
        num = 4
    return num


def clear_file():

    # 3天以前的文件清理
    clear_time = tool_ai.get_val_by_code(tool_ai.ConfigCode.SAVE_TIME)
    ai_servers = action_ai.list_ai_server()
    if len(ai_servers) < 1:
        tool_log.error("LJ - 无可用AI服务器...")
        return

    # 可用服务器
    for server in ai_servers:
        # 清除图片源文件：ai-server-async-file-path
        remote_dir_list = tool_ssh.list_dir(
            lj_bean_conn.init_ai_server(server), f"D:/ai-server-async-file-path")

        # 目录列表
        for remote_dir in remote_dir_list:
            dir_name_list = remote_dir.get("filename").split("-")
            # 判断文件名
            if len(dir_name_list) > 2:
                file_create_time = dir_name_list[1]
                # 判断时间，超过三天清理
                if days(datetime.datetime.now().strftime("%Y%m%d%H%M%S"), file_create_time) > int(clear_time):

                    # 删除执行过的文件
                    tool_ssh.remove_dir(
                        lj_bean_conn.init_ai_server(server), remote_dir.get("path"))
                    time.sleep(1)

        # 清除分析结果备份文件：D:/AI_code/yolov5_henan/runs/detect/exp
        remote_file_list = tool_ssh.list_file_and_children(
            lj_bean_conn.init_ai_server(server), f"D:/AI_code/yolov5_henan/runs/detect/exp")
        # 文件列表
        for remote_backup_file in remote_file_list:
            file_name_list = remote_backup_file.get("filename").split("-")
            # 判断文件名
            if len(file_name_list) > 3:
                file_create_time = file_name_list[2]
                # 判断时间，超过三天清理
                if days(datetime.datetime.now().strftime("%Y%m%d%H%M%S"), file_create_time) > int(clear_time):

                    # 删除执行过的文件
                    tool_ssh.remove_file(
                        lj_bean_conn.init_ai_server(server), remote_backup_file.get("path"))
                    time.sleep(0.1)

    # 清理本地文件
    tool_log.info(f"开始删除本地文件")
    base_dir = "temp/"
    local_files = [os.path.join(file) for file in os.listdir(base_dir)]
    for local_file in local_files:
        file_name_list = local_file.split("-")

        if len(file_name_list) == 1:  # 原图片
            file_date = file_name_list[0]
        elif len(file_name_list) > 3:  # 分析文件
            file_date = file_name_list[2]

        # 判断时间，超过三天清理
        if days(datetime.datetime.now().strftime("%Y%m%d%H%M%S"), file_date) > int(clear_time):
         # 删除执行过的文件
            tool_log.info(f"删除本地文件-{base_dir}{local_file}")
            os.remove(f"{base_dir}{local_file}")
            time.sleep(0.1)


# 运行
clear_file()

# tool_run.do_everyday(clear_file, "01:00")
# tool_run.start()